home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1993 July / InfoMagic USENET CD-ROM July 1993.ISO / sources / unix / volume11 / mush5.7 / part03 < prev    next >
Encoding:
Internet Message Format  |  1987-09-17  |  42.9 KB

  1. Subject:  v11i053:  Mail user's shell, Part03/12
  2. Newsgroups: comp.sources.unix
  3. Sender: sources
  4. Approved: rs@uunet.UU.NET
  5.  
  6. Submitted-by: island!argv@Sun.COM (Dan Heller)
  7. Posting-number: Volume 11, Issue 53
  8. Archive-name: mush5.6/Part03
  9.  
  10. [  This is the first half of the manpage; do "cat mush.1.[ab] >mush.1"
  11.    to get the full document.  --r$  ]
  12.  
  13. #! /bin/sh
  14. # This is a shell archive.  Remove anything before this line, then unpack
  15. # it by saving it into a file and typing "sh file".  To overwrite existing
  16. # files, type "sh file -c".  You can also feed this as standard input via
  17. # unshar, or by typing "sh <file", e.g..  If this archive is complete, you
  18. # will see the following message at the end:
  19. #        "End of archive 03 (of 12)."
  20. # Contents:  mush.1.a
  21. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  22. if test -f 'mush.1.a' -a "${1}" != "-c" ; then 
  23.   echo shar: Will not clobber existing file \"'mush.1.a'\"
  24. else
  25. echo shar: Extracting \"'mush.1.a'\" \(41182 characters\)
  26. sed "s/^X//" >'mush.1.a' <<'END_OF_FILE'
  27. X.\" Mush Man Page: Copyright (c) 1987 Dan Heller
  28. X.\"
  29. X.TH MUSH 1 "Mar 3, 1987"
  30. X.UC 4
  31. X.SH NAME
  32. XThe Mail User's Shell \- Shell for electronic mail.
  33. X.SH SYNOPSIS
  34. X.B mush
  35. X[
  36. X.B \-S
  37. X]
  38. X[
  39. X.B \-C
  40. X]
  41. X[
  42. X.B \-f
  43. X[
  44. Xfolder
  45. X]
  46. X]
  47. X[
  48. X.B \-n
  49. X]
  50. X[
  51. X.B \-T
  52. Xtimeout
  53. X]
  54. X[
  55. X.B \-t
  56. X]
  57. X[
  58. X.B \-i
  59. X]
  60. X[
  61. X.B \-N
  62. X]
  63. X[
  64. X.B \-H[:c]
  65. X]
  66. X[
  67. X.B \-r
  68. X]
  69. X[
  70. X.B \-v
  71. X]
  72. X[
  73. X.B \-s
  74. Xsubject
  75. X]
  76. X[
  77. X.B \-c
  78. Xcc-list
  79. X]
  80. X[
  81. X.B \-1
  82. Xcmd_help
  83. X]
  84. X[
  85. X.B \-2
  86. Xtool_help
  87. X]
  88. X[
  89. X.B \-d
  90. X]
  91. X[
  92. Xuser list ...
  93. X]
  94. X.SH INTRODUCTION
  95. XThe Mail User's Shell (Mush) is an interface for sending and manipulating
  96. Xa database of electronic mail messages under the
  97. X.I UNIX
  98. Xenvironment.  There are three user interfaces which allow the user to
  99. Xinteract with
  100. X.I Mush.
  101. XThe
  102. X.I window
  103. Xinterface for the Sun Workstation utilizes the icon and
  104. Xmenu based (mouse selectable) windowing system. This
  105. X.I tool
  106. X(graphics), mode is highly subject to the version of operating system
  107. Xyour Sun may be running.  While the program works with variable levels
  108. Xof success on earlier versions, it is intended to be run on Sun versions
  109. X2.0 and higher. See the BUGS section at the end for more information.
  110. X.PP
  111. XThe text-graphics interface is reminiscent of the
  112. X.I vi
  113. Xvisual editor. This interface does not require graphics capabilities of
  114. Xthe computer or the terminal on which it is run, but the terminal must
  115. Xhave the minimum capabilities required by any visual screen editor.
  116. X.PP
  117. XThe default interface is the conventional tty-based line mode
  118. Xsimilar to command line interpreters such as
  119. X.I csh
  120. Xas well as other mailers, such as University of California, Berkeley's,
  121. X.I Mail
  122. Xand Bell Lab's System V
  123. X.I mailx
  124. Xinterface.  This mode requires nothing from the terminal in cursor
  125. Xoptimization and may be run on many different version of
  126. X.I UNIX
  127. Xrunning on various architectures such as VAX and MicroVax (4.2, 4.3 BSD),
  128. XIBM-PC AT's running system V (XENIX), IBM-RT's, and pyramids.
  129. X.PP
  130. XSee the correpsonding subheadings for more information on the user
  131. Xinterface desired.  Most of this manual deals with commands, variables
  132. Xand actions which are usually common to all three interfaces although
  133. Xsome attention is paid to individual characteristics of each interface.
  134. X.PP
  135. XThe following command line arguments are understood by
  136. X.I Mush:
  137. X.TP
  138. X\-S
  139. XThis flag allows the user to enter the shell even if the system
  140. Xmailbox, or specified folder is empty or doesn't exist.
  141. X.TP
  142. X\-C
  143. XEnter the mailer in curses mode upon startup.
  144. X.TP
  145. X\-f [ filename ]
  146. XThe optional filename argument specifies a folder containing mail messages.
  147. XWith no argument,
  148. X.B mbox
  149. Xin the current directory (or the variable `mbox')
  150. Xis used.
  151. X.TP
  152. X\-n
  153. XNo initialization is done on start up.  That is, do not source
  154. X.I .mushrc
  155. Xor
  156. X.I .mailrc
  157. Xfiles.
  158. XSee the subheading INITIALIZATION for more inforation on start and these files.
  159. X.TP
  160. X\-T timeout
  161. X(Sun only) In the tool mode,
  162. X.I timeout
  163. Xspecifies the length of time (seconds) to wait between each check for new mail.
  164. X30 seconds is the smallest time allowed for performance reasons. 60 seconds
  165. Xis the default value.
  166. X.TP
  167. X\-t
  168. XUse the graphics tool mode (Sun only).
  169. X.TP
  170. X\-i
  171. XForces interactive mode even if input has been redirected to the program.
  172. XThis is intended for remote host mail sessions but also allows
  173. Xthe user to redirect "scripts" of
  174. X.I Mush
  175. Xcommands.  See the INITIALIZATION subheading for information on how to
  176. Xwrite scripts which deal with mail.
  177. X.TP
  178. X\-N
  179. XEnter
  180. X.I Mush
  181. Xwithout displaying any message headers. This argument is passed to the
  182. X.B folder
  183. Xcommand.
  184. X.TP
  185. X\-H[:c]
  186. XHave
  187. X.I Mush
  188. Xjust display mail headers without entering the shell.
  189. XSee the
  190. X.B headers
  191. Xcommand for information on the
  192. X.B :c
  193. Xargument. No colon modifier is equivalent to
  194. X.B "-H:a.\ "
  195. XThis option prevents the shell from running, so this option will turn off the
  196. Xflags, -S and -C.  This option is ignored if the tool mode is in effect.
  197. X.TP
  198. X\-r
  199. XInitialize the folder in Read-Only mode; no modification of the folder is
  200. Xpermitted. This argument is passed on to the
  201. X.B folder
  202. Xcommand.
  203. X.TP
  204. X\-v
  205. XVerbose mode is turned on. This option is passed to the actual mail delivery
  206. Xsubsystem internal to your version of
  207. X.I UNIX.
  208. XSome mailers do not have a verbose option, so this flag may not apply
  209. Xto your system (System V, for example).
  210. XThis applies when sending mail only.  If you are entering the shell,
  211. Xcurses mode, or the tool mode, this option is ignored.
  212. X.TP
  213. X\-s subject
  214. XThe subject is set on the command line using this flag. If the subject has
  215. Xany spaces or tabs, the entire subject should be encased in quotes.
  216. XThis applies when sending mail only.  If you are entering the shell,
  217. Xcurses mode, or the tool mode, this option is ignored.
  218. X.TP
  219. X\-c cc-list
  220. Xhe list of Carbon Copy recipients is set on the command line. If more than
  221. Xone address is specified, the entire list should be encased in quotes.
  222. XThis applies when sending mail only.  If you are entering the shell,
  223. Xcurses mode, or the tool mode, this option is ignored.
  224. X.TP
  225. X\-1 cmd_help
  226. X.TP
  227. X\-2 tool_help
  228. XSpecify alternate locations of help files.  These should be full pathnames
  229. Xaccessible for reading.  This is usually done if a binary copy of
  230. X.I Mush
  231. Xhas been copied from another machine and the wrong pathnames to the
  232. Xhelp files cannot be changed.
  233. X.TP
  234. X\-d
  235. XTurns on the debugging level to 1.  You can change debugging levels from
  236. Xwithin the shell using the
  237. X.B debug
  238. Xcommand.
  239. X.SH FEATURES
  240. X.PP
  241. XThe following features are common to all user interfaces that
  242. X.I Mush
  243. Xprovides.  Interface-specific features are listed separately
  244. Xunder the subheading for that interface. Commands and user definable
  245. Xvariables are described under the appropriate subheadings.
  246. X.PP
  247. X.B New Mail.
  248. X.PP
  249. XIf during a
  250. X.I Mush
  251. Xsession, new mail arrives for you, it is automatically incorporated into
  252. Xyour system mailbox and you are told that new mail has arrived.
  253. X.PP
  254. XIn the default line mode, new mail is checked between each command
  255. Xissued. In the tool based graphics mode, new mail is checked approximately
  256. Xevery minute or by the number of seconds specified by the
  257. X.B -T
  258. Xoption on the command line. In the curses mode, new mail is checked on each
  259. Xcommand and is displayed in the bottom line of the screen.
  260. X.PP
  261. XIf you are using your system mailbox as your "current folder," then the
  262. Xnew mail is added immediately to your current
  263. Xlist of messages and this information is displayed telling you whom the mail
  264. Xis from:
  265. X.sp
  266. X.ti +5
  267. XNew mail: (#15) island!argv@Sun.Com
  268. X.sp
  269. XIf you are not in your system mailbox, then the new mail will not be added
  270. Xto your list of messages, but you will instead be informed of the new arrival.
  271. X.sp
  272. XIf you are using the tool based mode and
  273. X.I Mush
  274. Xis closed to an iconic state, then the number of messages in the current
  275. Xfolder is displayed on the mailbox icon and the flag on the mailbox will go up.
  276. X.sp
  277. X.PP
  278. X.B Aliases.
  279. X.PP
  280. XMail aliases are shorthand names for long mail addresses.  These are
  281. Xsupported in the same manner as UCB Mail supports them.  Because
  282. X.I Mush
  283. Xhas command line history reminiscent of
  284. X.I csh,
  285. Xcommands which use uucp's `!' character for user-host and host-host
  286. Xseparation should be escaped (preceded by a backslash).  This is not
  287. Xnecessary in the initialization file (.mushrc) because history
  288. Xreferencing is ignored while these files are being sourced.  See the
  289. Xsubheading, INITIALIZATION and the line-mode interface for more information
  290. Xon initialization file format and the history mechanism.
  291. X.sp
  292. XAliases reference normal mailing addresses as well as other aliases. If a loop
  293. Xis detected, then the user will be notified and a dead.letter will be
  294. Xforced into the file
  295. X.B dead.letter
  296. Xin the user's home directory.  The command,
  297. X.B unalias,
  298. Xis used to reverse the effects of the
  299. X.B alias
  300. Xcommand.
  301. X.sp
  302. X.PP
  303. X.B Help.
  304. X.PP
  305. X.I Mush
  306. Xwas designed so that each command or action should not be a mystery.
  307. XHelping the user understand what to do and how to do whatever he wishes
  308. Xis the goal behind the help facility. For this reason, the command,
  309. X.B help
  310. Xgives information on both general usage and specific help categories.
  311. X.PP
  312. XIn text mode, most help is gotten by typing `-?' as an argument to a
  313. Xcommand.  Virtually all commands have the -? option.  When this option
  314. Xis specified, most commands will attempt to read from a help file the
  315. Xnecessary information explaining the functionality of the command in
  316. Xexecuted. If necessary, a pointer to other sources of information will
  317. Xbe given to fully explain a concept.
  318. X.PP
  319. XIn the tool/graphics mode, this is
  320. Xalso possible, but more extensive help is provided in the pop-up menus.
  321. XPop-up menus can be gotten from virtually anywhere on the screen; press the
  322. XRIGHT mouse button (the "menu button") and a number of items will appear
  323. Xin a menu. The last command in the menu list will be one labelled "help."
  324. XSelecting this menu item will display a "help box" in the center of the
  325. Xconsole and wait for input to remove the box.
  326. X.PP
  327. XIn the curses mode, the `?' key will display a list of the current
  328. Xcommand-to-key bindings; a keystroke or set of keystrokes correspond
  329. Xdirectly to a command.
  330. X.PP
  331. X.B Sorting mail.
  332. X.PP
  333. X.I Mush
  334. Xallows you to sort your mail according to various constraints such
  335. Xas time, status (new, unread, deleted, etc), by author and subject.
  336. XSee the
  337. X.B sort
  338. Xcommand in the subheading COMMANDS for more information on sorting.
  339. X.PP
  340. X.B Picking specific messages.
  341. X.PP
  342. XYou can select messages that contain unique information, or from
  343. Xmessages that have special attributes.  You have the option of
  344. Xrestricting your search to messages between dates, message numbers,
  345. Xauthor names and other constraints.
  346. X.sp
  347. X.SH INITIALIZATION
  348. X.PP
  349. XUpon startup, before any command line arguments are parsed, and before
  350. Xthe current folder's messages are read (thus, there are no messages to
  351. Xspeak of, yet),
  352. X.I Mush
  353. Xwill initialize itself with basic variable settings and values.
  354. XIf the -n option is given, initialization is
  355. X.B not
  356. Xdone.  If no -n option is given, it will source an
  357. X.B initializing file
  358. Xwhich contains commands that [typically] set variable values, aliases,
  359. Xcommand line aliases, and so forth.  The file it reads from is determined
  360. Xby first looking for the environment variable,
  361. X.I MAILRC.
  362. XIf that file isn't found, then the file
  363. X.I .mushrc
  364. Xis search from the home directory of the user.  If that file cannot be found,
  365. Xit will attempt to read the file,
  366. X.I .mailrc
  367. Xfrom the same directory. If that file isn't found, then the default
  368. Xinitialization file setup by the administrator is attempted.
  369. XFinally, if that file cannot be read, then nothing is done about initialization
  370. Xand the default values will be in effect.
  371. X.sp
  372. XIf the user has no home directory, or permissions prevent read/write access
  373. Xto $HOME, /tmp is used as the home directory. See the
  374. X.B home
  375. Xvariable under the VARIABLES heading.
  376. X.sp
  377. XYou may specify a filename to source if you want to source a specific file
  378. Xother than the default.  You may use the command
  379. X.B saveopts
  380. Xto save all variable settings, aliases, and all other
  381. X.I Mush
  382. Xsettable attributes.  If no filename is given on the command line,
  383. X.B saveopts
  384. Xchooses a file in the same manner that
  385. X.B source
  386. Xdoes. Using saveopts is highly discouraged since it overwrites files
  387. Xwithout warning and saves settable variables only.  ``if'' expressions
  388. Xare not saved and session-dependent settings may be invalid upon next
  389. Xinvocation.
  390. X.PP
  391. X.I "Initialization File Format.\ "
  392. XWhen reading the initialization file,
  393. X.I Mush
  394. Xwill recognize the `#' character as a comment character.  It may
  395. Xbe anywhere on a line in the file.  When that character is encountered,
  396. Xprocessing of that line is discontinued to the end of the line.
  397. XIf the `#' is encased in quotes (single or double), then it is not
  398. Xconsidered a comment.
  399. X.sp
  400. X.ti +2
  401. Xset shell = /bin/csh  # set the shell variable
  402. X.ti +2
  403. X# this entire line has been commented out.
  404. X.in +2
  405. Xset prompt = "Message #%m: "  # The `#' is within quotes
  406. X.sp
  407. X.PP
  408. XThe
  409. X.B exit
  410. Xcommand has special meaning in the initialization file. If the command
  411. Xis found,
  412. X.I Mush
  413. Xwill not exit, but rather, discontinue reading from the file immediately.
  414. X.PP
  415. XThere may be ``if'' expressions within the initialization file to determine
  416. Xcertain runtime states of
  417. X.I Mush.
  418. XThere are no parentheses allowed and only one boolean expression may be
  419. Xevaluated per line; that is, no ``&&'' or ``||'' may be used in expressions.
  420. XThere is currently no support for multiple levels of if-else expressions
  421. Xand embedded ``if'' expressions are ignored (they are evaluated to TRUE).
  422. XThere must always be an ``endif'' accompanying all ``if'' expressions.
  423. XThe statements associated with an ``if'' expression are never on the same
  424. Xline with the conditional.
  425. X.PP
  426. XUnderstood conditional expressions include the internal variables,
  427. X.I istool, iscurses, hdrs_only,
  428. Xand
  429. X.I redirect.
  430. XIf
  431. X.I istool
  432. Xis true, the program is going to start in the tool mode. If
  433. X.I iscurses
  434. Xis true, the program is in or is going to start in the curses mode even
  435. Xthough the screen package may not have already been started. If
  436. X.I hdrs_only
  437. Xis true, then the -H flag on the command line has been given. If
  438. X.I redirect
  439. Xis true, then input to the program is redirected.  The
  440. X.B -i
  441. Xoption on the command line is required to run the shell if redirect is on.
  442. XIf the flag is specified, the value for
  443. X.I redirect
  444. Xwill be set to false.
  445. XThese are internal variables whose values can not be referenced using the
  446. X``$variable'' method of variable expansion.
  447. X.PP
  448. XThe `!' operator may be used to negate expressions, thus,
  449. X.sp
  450. X.in +2
  451. X.nf
  452. Xif !istool
  453. X    exit
  454. Xelse
  455. X    set autoprint
  456. Xendif
  457. X.in -2
  458. X.fi
  459. X.sp
  460. Xmeans that if you are not running as a tool, stop reading commands from this
  461. Xfile.  Otherwise, set the autoprint variable.  The test for redirection may
  462. Xbe done to determine whether or not input, not output, has been redirected
  463. Xto the program.
  464. X.sp
  465. X.in +2
  466. X.nf
  467. Xset hdr_format = "%S %25f %7d (%l/%c) %25s"
  468. Xif (hdrs_only)
  469. X    exit
  470. Xendif
  471. X.in -2
  472. X.fi
  473. X.sp
  474. XThis tells the program to set the hdr_format variable and check to see if
  475. Xwe're running the program to read headers only.  If so, stop reading this
  476. Xfile (exit) and continue on with the program.  This speeds up runtime quite
  477. Xa bit for those who have lengthy initialization files because no other shell
  478. Xvariables are necessary.
  479. X.sp
  480. X.in +2
  481. X.nf
  482. Xif !iscurses
  483. X    set crt = 24 screen = 18
  484. Xendif
  485. X.in -2
  486. X.fi
  487. X.sp
  488. XThis segment checks to see if we're not running in curses mode and if not
  489. Xit will set our crt and screen sizes.  This is mostly because the curses
  490. Xmode will set those values for us by looking at the size of our screen
  491. Xfor us.  The
  492. X.B curses
  493. Xcommand itself should never be called from an initialization file. Doing
  494. Xso will cause terminal settings to be set incorrectly and unpredictable
  495. Xresults from there.  In fact, no interactive commands should be called
  496. Xfrom any initialization file.  These commands are not prevented because
  497. Xit is impossible to trace which commands are aliased to interactive commands
  498. Xand which might even be shell commands that are interactive.  The
  499. Xresponsibility of not running interactive commands is left to the user.
  500. XSee the section on curses under THE CURSES INTERFACE for configuring your
  501. Xenvironment so you enter the curses interface each time you runs the shell. 
  502. X.PP
  503. XWhen initialization files are being read, no history expansion is done,
  504. Xso the `!' need not be escaped for address aliasing.
  505. XString evaluation is allowed and the operators, "==" and "!=" may be
  506. Xused to determine their equality.  Usually, variables are compared with
  507. Xconstants for evaluation.
  508. X.sp
  509. X.in +2
  510. X.nf
  511. Xif $TERM == adm3a
  512. X    set pager = /usr/ucb/more
  513. Xelse
  514. X    set pager = /usr/local/less
  515. Xendif
  516. X.in -2
  517. X.fi
  518. X.sp
  519. XThis segment tests to see if the user's terminal type is "adm3a".  If it is,
  520. Xthen it sets the pager variable to be the "more" program.  Note that the
  521. Xvariable TERM will be gotten from the user's environment if a shell variable
  522. Xis not set already.  Otherwise, the pager variable is set to "less".  This
  523. Xexample exemplifies the fact that "less" normally fails to function correctly
  524. Xfor the terminal type ``adm3a'' so we don't use it.
  525. X.PP
  526. XAfter sourcing the initialization file,
  527. X.I Mush
  528. Xreads all the mail out of the specified folder (the system spool directory
  529. Xif no folder is given) and creates a list of messages. The current maximum
  530. Xnumber of messages the user can load is set to 1000 by default.  The system
  531. Xadministrator who configures the program can reset this value higher or lower
  532. Xif you ask nicely. If the user has the
  533. X.B sort
  534. Xvariable set, then when the current folder's messages are finally read,
  535. Xthe messages are sorted according to the value of the
  536. Xvariable (see the sort entry under the VARIABLES heading for more information).
  537. XEach message has a number of message headers which contain information
  538. Xabout whom the mail is from, the subject of the message, the date it was
  539. Xreceived, and other information about the letter.  This information is then
  540. Xcompiled into a one line summary and is printed out sequentially in the
  541. Xappropriate manner depending on the interface you're using.
  542. X.PP
  543. XAt this point, commands may be input by the user.  The initialization file
  544. Xis read
  545. X.I before
  546. Xany messages are read into the program.  Message filtering commands should
  547. Xnot be placed in this file unless you know you're going to resource the file
  548. Xlater as a command. For example, a filtering file, "filter", might contain:
  549. X.sp
  550. X.in +2
  551. X.nf
  552. Xpick -f Mailer-Daemon | save mail_errors
  553. Xpick -f yukko | delete
  554. Xpick -s -i thesis | save +thesis_mail
  555. Xpick -t unix-wizards | +wizmail
  556. Xupdate
  557. Xsort d
  558. X.in -2
  559. X.fi
  560. X.sp
  561. XThe first command the user could type might be
  562. X.B source filter
  563. Xand the following would happen.  First, all messages that have Mailer-Daemon
  564. Xin the from line will be saved in the file "mail_errors".  Then, all mail from
  565. Xthe user "yukko" will simply be deleted.  Next, all mail that has in the 
  566. Xsubject field "thesis" (case ignored, so "Thesis" would also match) would be
  567. Xsaved in the file $folder/thesis.  The next command would find all messages
  568. Xthat were addressed to the group "unix-wizards" (of which the user is an elite
  569. Xmember of) and save them in the file $folder/wizmail.  The folder will be
  570. Xupdated, removing all deleted mail (saved mail may be marked as deleted),
  571. Xand the folder is reread and sorted according to the date of the messages.
  572. X.PP
  573. X.SH THE TTY INTERFACE
  574. XIn the line-mode, the user is given a prompt to which commands are issued
  575. Xand arguments are passed to commands.  When the user types at the prompt,
  576. Xeach line is parsed and words (or, arguments) are separated into an array
  577. Xof strings.  This array, also called an
  578. X.I argument vector,
  579. Xis then modified by expanding history references, command line aliases,
  580. Xor expanding variable references.  A command line ends when the end of
  581. Xthe line is encountered or a pipe (|) or semicolon (;) character are
  582. Xencountered, separating discrete commands.
  583. X.PP
  584. XWhen a command line has been determined and placed in an argument vector, the
  585. Xfirst argument in the vector (the `command') is searched for in a list of legal
  586. X.I Mush
  587. Xcommands.  If found, the function associated with that command is called and
  588. Xthe rest of the line is passed to that function as
  589. X.I command line arguments.
  590. X.PP
  591. XBefore commands are called, however, the input the user gives is preprocessed
  592. Xin a style reminiscent of
  593. X.I csh.  Mush
  594. Xalso supports a subset from each of the following aspects of
  595. X.I csh.
  596. X.in +2
  597. X\(bu Command history.
  598. X.br
  599. X\(bu Command line aliasing.
  600. X.br
  601. X\(bu A `piping' mechanism to redirect "input" and "output" of commands.
  602. X.in -2
  603. X.PP
  604. X.I Command history.
  605. X.PP
  606. XThe history mechanism remembers commands up to the value of the
  607. X.B history
  608. Xvariable.  To reference previously typed commands, the `!' character
  609. Xis used in the same manner as
  610. X.I csh.
  611. X.sp
  612. XExamples:
  613. X.nf
  614. X.in +2
  615. X!-2:$   two commands ago, last argument.
  616. X!3:2-4  the third command, arguments two through four.
  617. X!!      the last command in its entirety.
  618. X.sp
  619. X.in -2
  620. X.fi
  621. XThere is a limited implementation of history modification.
  622. XSupported is the argument selector which references
  623. Xcommand line arguments and 'p' (echo, but don't execute the command).
  624. X.PP
  625. XDuring the sourcing of initialization files (.mushrc), history is not
  626. Xin effect and therefore the ``!'' character does not cause history expansion.
  627. XThis includes startup of the program and when the command
  628. X.I source
  629. Xis issued.  Uucp style addresses that contain the ``!'' character may
  630. Xbe given without the need to be preceded by a backslash in the
  631. Xinitialization file.  However, ``!'' does need to be escaped if
  632. X.B cmd's
  633. Xare used to reference command line arguments.
  634. X.PP
  635. X.I Command line aliasing.
  636. X.PP
  637. XThis feature enables command substitution similar to
  638. X.I csh.
  639. XTo be backwards compatible with UCB's Mail, the
  640. X.I alias
  641. Xcommand is used for address aliasing.  Thus, the command
  642. X.I cmd
  643. Xis introduced in place of
  644. X.I alias.
  645. X.PP
  646. XExamples:
  647. X.nf
  648. X.in +2
  649. Xcmd d delete
  650. Xcmd t type
  651. Xcmd dt 'd ; t'
  652. Xcmd - previous
  653. Xcmd r 'replysender \\!* -e -i'
  654. X.in -2
  655. X.fi
  656. X.sp
  657. XIn the last example, if the user types `r 5',
  658. X.I Mush
  659. Xwill reply to sender of the fifth message and pass all the other
  660. Xarguments along to the
  661. X.B reply
  662. Xcommand.  Note the escaping of the ! character.
  663. XThis must also be done if set in the initialization file (.mushrc).
  664. XHad the user not specified a message number on the command line (`r'),
  665. X.B respond
  666. Xwould reply to the "current message" rather than the fifth message.
  667. X.PP
  668. X.I Piping commands.
  669. X.PP
  670. X"Output" from a command is a
  671. X.B message list,
  672. Xnot the
  673. X.I text
  674. Xin a message.  A
  675. X.B message list
  676. Xis defined as the set of messages which the user specifies in a command or
  677. Xthe messages a command affects after it is through executing.
  678. XWhen one command is piped to another, the effect is that the second command
  679. Xwill "consider only those messages the affected by first command."
  680. XIn most cases,
  681. X.I Mush
  682. Xis smart enough to know when piping is occurring and may suppress text output
  683. Xthat a command might produce.
  684. X.PP
  685. XExamples:
  686. X.sp
  687. X.ti +2
  688. Xpick -f fred | save fred_mail
  689. X.sp
  690. XThis will find all the messages from "fred"
  691. Xand save them all in the file named "fred_mail".
  692. X.sp
  693. X.ti +2
  694. Xlpr 4-8 | delete
  695. X.sp
  696. XThis will send messages 4, 5, 6, 7, and 8 to the printer and then delete them.
  697. X.sp
  698. X.ti +2
  699. Xheaders :o | delete
  700. X.sp
  701. XDelete's all old (already read) mail.
  702. X.PP
  703. XBecause action is taken on mail messages, not files,
  704. Xmetacharacters such as `*' and `?' are not expanded to file names as
  705. X.I csh
  706. Xwould do.  Instead,
  707. X.I Mush
  708. Xcommands take as arguments, message lists (a list references one or
  709. Xmessages) to take action upon. To reference message numbers, there is a
  710. Xspecial syntax that
  711. X.I Mush
  712. Xwill understand.
  713. X.sp
  714. X.in +2
  715. X.nf
  716. X.ta 2i
  717. X*    All messages.
  718. X^    The first message.
  719. X$    The last message.
  720. X.    The current message.
  721. XN-M    A range of messages between N and M.
  722. X.sp
  723. X.fi
  724. X.in -2
  725. XIn the last case, N and M may be * ^ $ . or digits referencing
  726. Xexplicit message numbers.  The range must be in ascending order.
  727. X.sp
  728. XYou can also negate messages by placing the message list inside
  729. Xbraces, `{' `}' -- thus, the expression "2-19 {11-14}" references
  730. Xmessages 2 through 19 except for those between 11 through 14.
  731. X.sp
  732. XNote that message lists are parsed left to right.  Indicating negated
  733. Xmessages may be reset by turning them on again later in the argument list.
  734. XA common error new users have is to specify a negated list without
  735. Xspecifying any beginning messages.
  736. X.ti +2
  737. Xdelete { 6 }
  738. X.sp
  739. XIn this example, the user attempted to delete all messages
  740. Xexcept for number 6.  He should have specified the * before hand.
  741. X.sp
  742. X.ti +2
  743. Xpreserve ^-. { 3 }
  744. XHere, the user specifies a valid message list and causes
  745. X.I mush
  746. Xto preserve all messages from the beginning of the list (message 1)
  747. Xto the current message excluding message 3.
  748. X.PP
  749. XAs discussed, the command line is parsed and the command given is
  750. Xcalled and the rest of the arguments on the command line are passed to it.
  751. XIf no command has been found for the one given, then the variable
  752. X.B unix
  753. Xis checked. If set, the command line given is attempted to be run as a regular
  754. X.I UNIX
  755. Xcommand.
  756. X.PP
  757. XIf it is not set, or if the command cannot be found in the user's PATH
  758. Xenvironment, a message will be printed indicating that the command was
  759. Xnot found.
  760. X.PP
  761. XSince no `messages' are affected by
  762. X.I UNIX
  763. Xcommands, piping is disallowed either to or from such commands. If the
  764. Xuser wishes to execute
  765. X.I UNIX
  766. Xcommands which are to be piped to one another (or use any sort of redirection),
  767. Xthe command,
  768. X.B sh
  769. Xis provided for such purposes.  Since
  770. X.I Mush
  771. Xwill parse the entire command line, caution should be taken by enclosing
  772. Xquotes around questionable shell variables or metacharacters.
  773. XSee the COMMANDS heading below for more detail.
  774. X.PP
  775. XThis shell-like quality is for the convenience of the user and is not
  776. Xintended to replace the functionality of
  777. X.I sh, csh,
  778. Xor any other command interpreter.
  779. X.sp
  780. X.SH THE CURSES INTERFACE
  781. XThe curses interface utilizes the curses routines intrinsic to most
  782. XUNIX systems these days.  This interface is screen oriented rather
  783. Xthan line oriented and allows the user to access commands and messages
  784. Xmore quickly at the cost of history, piping, and a few commands.
  785. X.PP
  786. XMany users who prefer the curses interface might want to always start
  787. Xall their mail sessions in the curses interface.  Putting the curses
  788. Xcommand in your initialization file is a no-no, so you can alias your
  789. Xlogin shell mail command to include the -C option.  If you use the Bourne
  790. XShell, you're going to have to type it out all the time.  Mush is  going
  791. Xto attempt to know not to run a shell if you're just sending mail to someone,
  792. Xso the command line sequences:
  793. X.sp
  794. X.nf
  795. X% alias mail 'mush -C'
  796. X% mail fred
  797. X.fi
  798. X.sp
  799. Xwill mail to fred and not enter the shell.  However, if you just said, "mail"
  800. Xwith no arguments, you'll enter the shell in curses mode if you have mail.
  801. XIf you don't, you'll be told so.  If you want to enter curses mode even if
  802. Xyou don't have mail, use the -S option on the command line.
  803. X.PP
  804. XIn curses mode, the user's terminal has it's "echo" turned off so commands
  805. Xthat are issued are not echoed on the screen. Certain commands cause the mode
  806. Xto return to normal for typing purposes (sending mail, for example).
  807. XIn normal operation, the screen will display the current set of message
  808. Xheaders, the current message number is in the top left corner, the
  809. Xmail status on the top line, and the cursor will be placed on the current
  810. Xmessage. The number of message headers displayed is set by the variable,
  811. X.B screen.
  812. XIf the user does not have that variable set, the baud rate is checked and
  813. Xthe size of the screen is set according to optimal refresh time. Usually,
  814. X300 baud gives 7 lines, 1200 gives 14, 2400 gives 22 lines, and all higher
  815. Xbaud rates give the size of the screen, whatever that may be.
  816. XNote that the top line is reserved for "status" and the bottom line is
  817. Xfor user interaction should it be required.
  818. X.PP
  819. XThe user may now type commands via key sequences which are not echoed
  820. Xto the screen.  Thus, function keys may be bound to "commands" by using the 
  821. X.B bind
  822. Xcommand. 
  823. XA list of key-to-command bindings can be found at runtime by typing `?'
  824. Xin curses mode or by using the
  825. X.B bind
  826. Xcommand.
  827. X.PP
  828. XThe commands which you can map sequences to are intended to be as self
  829. Xexplanatory as possible, but admittedly, it's easier to figure out via
  830. Xtrial and error than to try to wade through this documentation.
  831. XA list of the legal curses commands can be obtained when executing the
  832. Xbind command.  Regular tty line-mode commands are not issued from
  833. Xthe curses interface; only special curses mode commands are understood.
  834. XThe current list of valid curses commands is:
  835. X.sp
  836. X.ta 1.5i 3i 4.5i
  837. X.in +4
  838. X.nf
  839. Xgoto msg    write    write list    save
  840. Xsave list    copy    copy list    delete
  841. Xdelete list    undelete    undelete list    reverse video
  842. Xredraw    next msg    back msg    first msg
  843. Xlast msg    top page    bottom page    screen next
  844. Xscreen back    show hdr    source    saveopts
  845. Xsearch up    search down    search cont    preserve
  846. Xsort    sort reverse    quit!    quit
  847. Xexit!    exit    update    folder
  848. Xshell escape    line mode    lpr    chdir
  849. Xvariable    ignore    alias    my hdrs
  850. Xversion    mail flags    mail    reply
  851. Xreply all    display    top    display next
  852. Xbind    unbind    help 
  853. X.fi
  854. X.in -4
  855. X.sp
  856. X.PP
  857. XThe following is a list of default key-command bindings.  If you specify
  858. Xbind commands in your initialization file that conflict with these defaults,
  859. Xyour settings will override the defaults.  The default settings given here
  860. Xuse the ^-character method to indicate control characters.
  861. XThus, `^X' would mean control-X even though you'd have to type "\\CX" to set
  862. Xthe binding and actually use the control key and the `X' key simultaneously
  863. Xto really
  864. X.I do
  865. Xa Control-X.  This is mostly because nroff makes printing the backslash
  866. Xcharacter so amazingly difficult.
  867. X.TP
  868. Xt, p, T=top, n=next
  869. XDisplay (type/print) message. Top will display the first
  870. X.B crt
  871. Xlines of a message. `n' will print the next message.
  872. XIf the current message is deleted, the next undeleted message is found.
  873. XYou might notice this is different than the line mode which will return
  874. Xan error message that the current message is marked as deleted.
  875. X.TP
  876. X+, j, RETURN
  877. XGo to next message.
  878. X.TP
  879. X-, k, ^K
  880. XGo to previous message.
  881. X.TP
  882. Xz, Z
  883. XPrint next/previous screenful of messages.
  884. X.TP
  885. XH
  886. XHeader information for the current is printed.  This only works when
  887. Xthe user is provided with the "...continue..." prompt and he wishes to
  888. Xview the current message header instead of redrawing the entire screen.
  889. X.TP
  890. Xf
  891. Xchange folder. If current folder has changed, verification for update
  892. Xwill be prompted.
  893. X.TP
  894. X^U
  895. Xupdate folder.
  896. X.TP
  897. Xv
  898. Xset regular variables.
  899. X.TP
  900. Xa
  901. Xset aliases
  902. X.TP
  903. Xh
  904. Xset personal headers
  905. X.TP
  906. Xi
  907. Xset ignored headers
  908. X.TP
  909. X|
  910. Xsend message to printer
  911. X.TP
  912. Xm, M
  913. Xsend mail (prompt for mail flags).
  914. X.TP
  915. Xd, D, u U
  916. Xdelete/undelete messages (prompt for message list).
  917. X.TP
  918. X^P
  919. XPreserve current message (toggle).
  920. X.TP
  921. Xr, R
  922. Xreply sender/reply all.
  923. X.TP
  924. Xs, S, c, C, w, W
  925. Xsave, copy, or write messages (capitals prompt for message lists).
  926. X.TP
  927. X!
  928. XShell Escape --prompts for command: RETURN invokes a shell.
  929. X.TP
  930. Xo, O
  931. XOrder messages (sort).  O reverses order.  The order in which to
  932. Xsort messages is prompted.
  933. X.TP
  934. X(, )
  935. Xsource/saveopts --filename is prompted.
  936. X.TP
  937. X/, ^/ ^N
  938. Xforward, backward, continue search for patterns.  Entire messages are
  939. Xnot searched for here.  Only the text available on the screen is searched for.
  940. X.TP
  941. XV
  942. XPrint version number.
  943. X.TP
  944. X{, }
  945. XTop/bottom of screen.
  946. X.TP
  947. X^, $
  948. XGo to first/last message.
  949. X.TP
  950. X%
  951. Xchange directory.
  952. X.TP
  953. Xg, 0-9
  954. XGo directly to message number.
  955. X.TP
  956. X:[cmd]
  957. XEnter line mode for one command (RETURN exits curses-mode).
  958. X.TP
  959. XQ, q, X, x
  960. XQuit. `x' does not update mail. `Q' does not prompt for update verification.
  961. X`Q' and `X' may be typed at the "...continue..." prompt whereas `q' and `x'
  962. Xmay not.
  963. X.TP
  964. X^R
  965. XToggle reverse video mode (current message is in reverse video).
  966. X.TP
  967. X^L
  968. Xredraw the screen.
  969. X.PP
  970. XWhen setting new key sequences to be bound to commands, the user may
  971. Xuse control keys and the ESCAPE character for extended commands.
  972. XExceptions are control-C, control-\\, and possibly other control characters
  973. Xdepending on your system's configuration or your current tty interrupt
  974. Xcharacter settings.  The spacebar may not be bound since
  975. Xit is the only obvious way to return to the top level curses mode from the
  976. X"...continue..." prompt.
  977. X.PP
  978. XWhen assigning key sequences to commands, the user enters the
  979. X.B bind
  980. Xcommand and prompting is done.  If the
  981. Xuser wishes to have control characters or the escape character in a key
  982. Xsequence, he must use special notation since control characters are not
  983. Xechoed visibly on the screen.  This same sequence is used if the user wants
  984. Xto bind sequences in the initialization file.
  985. X.PP
  986. XTo bind control characters, the sequence, "\\Cc" is used where ``c'' is the
  987. Xcharacter which the control key will translate to and must be in upper case.
  988. XThe sequence, "\\CP" would map
  989. Xto control-P.  If the user wishes to indicate the RETURN key, this is specified
  990. Xwith the string, "\\n" and the tab key is specified by the string "\\t".
  991. XOn a Wyse-50 terminal, the 8th function key outputs the three characters:
  992. XControl-A, H, line-feed.  To map this function key to a command, the
  993. Xuser would have to enter the sequence, "\\CAH\\n" as the key sequence,
  994. Xthen follow up with a valid curses command.  From then on, if the user
  995. Xuses that function key, then the command mapped to it will be executed.
  996. X.PP
  997. XThe ESCAPE key is signified by the sequence, "\\E".  On a Sun-3 workstation,
  998. Xthe R1 key outputs the character sequence: ESC, [, 2, 0, 8, z.
  999. XThe corresponding key sequence would be "\\E[208z".
  1000. XRestrictions are that key sequences may not contain the space key
  1001. Xor begin with a digit.  Unfortunately, this makes mapping the spacebar
  1002. Xto a command impossible.
  1003. X.PP
  1004. XWhenever a command is entered, if the command causes
  1005. Xthe screen to scroll or be refreshed in anyway, the mode is left in the
  1006. X.I continue
  1007. Xmode.  When in this mode, the user is given his line-mode prompt followed
  1008. Xby "...continue..." indicating that he may issue a new command or
  1009. Xreturn to the top level where the current message headers are displayed
  1010. Xon the screen. Remember that this is still the curses mode, but much time
  1011. Xis saved by avoiding to redraw the screen after each command.  The user
  1012. Xmay move up and down messages using the appropriate commands (j/k by default)
  1013. Xor anything else the curses mode allows.  Unknown commands do not return to
  1014. Xthe top level, only the spacebar, and the exit and quit commands will return
  1015. Xto the top level.
  1016. XBecause the exit and quit commands are used to do this, there are 2 additional
  1017. Xways to "quit" in the program and return to the login shell.
  1018. XThe two commands, "exit" and "quit" commands will quit from the top level, but
  1019. Xthe commands,
  1020. X.B exit!
  1021. Xand 
  1022. X.B quit!
  1023. Xare used to exit from the "continue" level in the curses interface as well
  1024. Xas from the top level.
  1025. X.PP
  1026. XNote that the best way to understand the curses interface is to just use it.
  1027. XIn line mode, the command "curses" puts you into curses mode.
  1028. X.PP
  1029. X.SH THE GRAPHICS INTERFACE
  1030. XWhen running the window-based graphics interface, there will be 5
  1031. Xwindows displaying panels of commands, message headers and a text
  1032. Xwindow which is used for displaying messages or writing messages
  1033. Xto send to other users.
  1034. X.PP
  1035. XThe panel items have labels describing their functionality.  Selecting
  1036. Xa panel item with the LEFT mouse button causes the action to be executed.
  1037. XThe RIGHT mouse button displays a menu of options that the command may
  1038. Xbranch to.  For example, the
  1039. X.B save
  1040. Xpanel item by default will save messages to the file "mbox", but if the
  1041. XRIGHT mouse button causes a menu to be displayed the choices of where
  1042. Xto save the message increases to include the items in the menu.  These
  1043. Xtypically include the files in the user's folder directory (see the
  1044. X.B folder
  1045. Xvariable below).
  1046. X.PP
  1047. XAt the end of each list of menu entries for panel items is an item
  1048. Xlabelled "help."  When this item is chosen, help with that command
  1049. Xis displayed in the center of the console.
  1050. X.PP
  1051. XWhen composing letters, the interface is the same for the tool mode,
  1052. Xthe line mode and the curses mode.  Tilde escapes are recognized by all
  1053. Xthe interfaces, but the tool interface allows the user to use the menu
  1054. Xmouse button to select the tilde escape desired.
  1055. X.PP
  1056. XIf the user wishes to review a mail message while in edit-mode, he may
  1057. Xdo as the other interfaces and enter the tilde escape command, ``~:print''.
  1058. XThis will cause the current message (or message number if given) to be
  1059. Xdisplayed in the window.  Editing is temporarily put on hold till the user
  1060. Xenters a `q' in the message window to indicate that he is done reading the
  1061. Xmessage and input is to be directed again to the letter being composed.
  1062. X.PP
  1063. X.SH GENERAL USAGE
  1064. X.PP
  1065. XBecause there are three different interfaces available to the user,
  1066. Xthe tty characteristics (backspace, kill-word, kill-line, redraw line)
  1067. Xare simulated identically to all routines. When the user has to type
  1068. Xsomething, the 4.2BSD style of tty driver interface is simulated whether
  1069. Xyou're in the window system, the curses mode, the tty-line mode, and
  1070. Xeven on System-V machines. This means that backspacing causes a
  1071. Xbackspace-space-backspace effect (erasing the character backspaced over).
  1072. XThe user may reset his tty characteristics using the stty command.
  1073. X.PP
  1074. X.I "Displaying messages.\ "
  1075. X.PP
  1076. XDepending on the interface you use, you can display any message in your
  1077. Xlist of messages as long as the message is not marked for deletion.  If
  1078. Xthe message is marked as deleted, then use the 
  1079. X.B undelete
  1080. Xcommand supplied by the interface you are using.
  1081. XTo display a message in line mode, specify a message to be displayed using
  1082. X.B print, type, p, t,
  1083. Xor by typing the message number, that message will be printed on the screen.
  1084. X.sp
  1085. XIn the graphics mode, you move the mouse over the message you wish to
  1086. Xbe displayed and select the LEFT mouse button.  If the message you want
  1087. Xis not visible (in the header subwindow), you may type in the message
  1088. Xsubwindow the number of the message and hit return.  That message number
  1089. Xwill be displayed.
  1090. X.sp
  1091. XIn curses mode, you can move the cursor over the message you want and type
  1092. Xa `t' or `p' to read the message.  The user may "bind" other keys to call
  1093. Xthe function which displays messages if `t' or `p' are uncomfortable.
  1094. X.sp
  1095. XIn the line or curses mode, if the message has more lines than the variable
  1096. X.B crt,
  1097. Xthen a
  1098. X.I pager
  1099. Xwill be invoked to allow the user to page through the message without
  1100. Xhaving it race by the screen.  The pager used is determined by the variable,
  1101. X.B pager.
  1102. XIf that variable is unset, the a default pager will be used.  Note that
  1103. Xif pager is set, but not to a value, then nothing will be printed.
  1104. X.PP
  1105. XIn the tool mode, if a message is larger than the size of the message
  1106. Xsubwindow, the amount of the message viewed is displayed and the user
  1107. Xmay page through the message via `+' (forward by lines), `-' (backwards
  1108. Xby lines), LEFT mouse button (forward by pages), or RIGHT mouse button
  1109. X(backwards by pages).  The user may precede the `+' and the `-' keystrokes
  1110. Xwith a numerical
  1111. X.I count
  1112. Xto specify how many lines to scroll.
  1113. X.PP
  1114. XAn alternative to displaying messages is the
  1115. X.B top
  1116. Xcommand.  This command will print just the top few lines of a message.
  1117. XThe number of lines is determined by the variable,
  1118. X.B toplines.
  1119. XIf this variable isn't set, ``top'' will print the value of the variable,
  1120. X.B crt,
  1121. Xnumber of lines.
  1122. X.sp
  1123. X.PP
  1124. X.I "Sending mail.\ "
  1125. XYou can send mail using the
  1126. X.B mail
  1127. Xcommand or by responding to other mail. In either case, when you are
  1128. Xsending mail, you are in a mode where everything you type is added to
  1129. Xthe contents of the message.  When you are done typing your message, you
  1130. Xcan type ^D to signify the end of the message.  If you have the variable,
  1131. X.B dot
  1132. Xset, then you can end a message with a "." on a line by itself.
  1133. X.PP
  1134. XWhile you are composing a message,
  1135. X.I Mush
  1136. Xtreats lines beginning with the character `~' specially.
  1137. XThis is called a
  1138. X.B tilde escape.
  1139. XFor instance, typing ``~i'' (alone on a line) will place a copy
  1140. Xof the "current message" into your message body.  It will not include
  1141. Xthe message headers of the message, just the body of text. Each line of
  1142. Xthe message will be preceded by "> " to indicate that it is an included
  1143. Xmessage.  You can set the variable string
  1144. X.B indent_str
  1145. Xto a string if you want to precede those lines with
  1146. Xsomething other than "> ".
  1147. X.sp
  1148. XAvailable
  1149. X.I tilde escapes:
  1150. X[OPTIONAL arguments in square brackets]
  1151. X.TP
  1152. X~e [editor]
  1153. XEnter the editor. `set editor', env EDITOR, vi.
  1154. X.TP
  1155. X~v [editor]
  1156. XEnter the visual editor. `set visual', env VISUAL, vi.
  1157. X.TP
  1158. X~p [pager]
  1159. XPage the message body. `set pager', env PAGER, more.
  1160. X.TP
  1161. X~i [msg#'s]
  1162. XInclude current msg body [msg#'s] indented by indent_str.
  1163. X.TP
  1164. X~H [msg#'s]
  1165. XSame, but include the message headers from included messages.
  1166. X.TP
  1167. X~f [msg#'s]
  1168. XForward mail. Not indented, but marked as "forwarded mail".
  1169. X.TP
  1170. X~t [list]
  1171. XChange list of recipients. If a list is given, this list is
  1172. X.B appended
  1173. Xto the current list.  If no list is given, then the current list
  1174. Xis displayed and the cursor placed at the end of the list.  You
  1175. Xcan backspace over the stuff in the list or you can append more
  1176. Xaddresses onto the end of the list as desired.  System-v users
  1177. Xmay only replace the line, retyping it if necessary, to append new
  1178. Xusers; specifying a list on the tilde line is recommended in this case.
  1179. X.TP
  1180. X~s [subject]
  1181. XModify the subject header. If an argument is given (a new subject), then
  1182. Xthe subject line is
  1183. X.B replaced
  1184. Xby the new subject line.  If none is given, then the subject line is
  1185. Xdisplayed for editing just as the ~t command.
  1186. X.TP
  1187. X~c [cc list]
  1188. XModify carbon copy recipients identical to ~t.
  1189. X.TP
  1190. X~b [bcc list]
  1191. XModify blind carbon recipients identical to ~t.
  1192. X.TP
  1193. X~h
  1194. XModify all message headers.  Each header is displayed one by one and
  1195. Xeach may be edited.
  1196. X.TP
  1197. X~S[!]
  1198. XInclude Signature file [don't include] at end of message. The variable,
  1199. X.B autosign
  1200. Xdescribes the file or string to append to the message.
  1201. XSee the VARIABLES section for more information on this variable.
  1202. X.TP
  1203. X~F[!]
  1204. XAdd a fortune at end of letter [don't add] at end of message.
  1205. X.TP
  1206. X~w file
  1207. XWrite message buffer to file name.
  1208. X.TP
  1209. X~a file
  1210. XAppend message buffer to file name.
  1211. X.TP
  1212. X~r file
  1213. XRead filename into message buffer.
  1214. X.TP
  1215. X~q
  1216. XQuit message; save in dead.letter if "nosave" is not set.
  1217. X.TP
  1218. X~x
  1219. XExit message; don't save in dead.letter.
  1220. X.TP
  1221. X~$variable
  1222. XInsert the string value for variable into message.  If a boolean variable
  1223. Xis listed, nothing is appended regardless of its value.
  1224. X.TP
  1225. X~:cmd
  1226. XRun the
  1227. END_OF_FILE
  1228. if test 41182 -ne `wc -c <'mush.1.a'`; then
  1229.     echo shar: \"'mush.1.a'\" unpacked with wrong size!
  1230. fi
  1231. # end of 'mush.1.a'
  1232. fi
  1233. echo shar: End of archive 03 \(of 12\).
  1234. cp /dev/null ark03isdone
  1235. MISSING=""
  1236. for I in 1 2 3 4 5 6 7 8 9 10 11 12 ; do
  1237.     if test ! -f ark${I}isdone ; then
  1238.     MISSING="${MISSING} ${I}"
  1239.     fi
  1240. done
  1241. if test "${MISSING}" = "" ; then
  1242.     echo You have unpacked all 12 archives.
  1243.     rm -f ark[1-9]isdone ark[1-9][0-9]isdone
  1244. else
  1245.     echo You still need to unpack the following archives:
  1246.     echo "        " ${MISSING}
  1247. fi
  1248. ##  End of shell archive.
  1249. exit 0
  1250.